﻿using System;
using System.Collections.Generic;
using System.Linq;
using System.Web;
using System.Data;
using System.Web.UI;
using System.Web.UI.WebControls;
using Sistema_Totem.Clases;
using Sistema_Totem.Clases.Fabricas;
using Sistema_Totem.Logica.Fabricas;
using Sistema_Totem.Logica.Comandos;
using Sistema_Totem.Presentacion.Contrato.Requerimientos;

namespace Sistema_Totem.Presentacion.Presentador.Requerimientos
{
    public class PresentadorModificarRequerimiento
    {
        #region Atributos

        private IContratoModificarRequerimiento _vista;
        private List<Requerimiento> _requerimiento;
        private Comando<List<Requerimiento>> _comandoRequerimiento;

        #endregion Atributos

        #region Constructor

        public PresentadorModificarRequerimiento(IContratoModificarRequerimiento 
            iContratoModificarRequerimiento) 
        {
            _vista = iContratoModificarRequerimiento;
        }

        #endregion Constructor

        #region Metodos

        #region GV Consultar Requerimiento

        /// <summary>
        /// Método que llena el GV con todos los requerimientos asociados 
        /// a un Proyecto.
        /// </summary>
        /// <param name="requerimiento"></param>
        public void CargarTablaRequerimiento(List<Requerimiento> requerimiento)
        {
            DataTable tabla = new DataTable();
            tabla.Columns.Add("Id", typeof(string));
            tabla.Columns.Add("Nombre", typeof(string));

            //Se recorre la lista de requerimientos 
            foreach (Requerimiento _req in requerimiento)
            {
                string nombre = null;
                int id = 0;
                foreach (Seccion _seccion in _req.ListaSeccion)
                {
                  // recorremos la lista de elementos
                    foreach (ElementoControl _elemento in _seccion.ListaControl)
                    {

                        if (_elemento.Nombre == "Nombre")
                        {
                            id = _req.Id;
                            nombre = _elemento.Contenido;
                        }
                    }
                }
                // seteamos el DataTable con el "Id" y el "nombre" del requerimiento
                tabla.Rows.Add( id, nombre);
            }
            //Seteamos el gridview con el datatable de los requerimientos.
            _vista.GVBuscarRequerimiento.DataSource = tabla;
            _vista.GVBuscarRequerimiento.DataBind();
        }

        #endregion GV Consultar Requerimiento

        #region Cargar GV Requerimiento

        /// <summary>
        /// Metodo para buscar todos los requerimiento para un determinado proyecto
        /// </summary>
        /// <param name="idProyecto"></param>
        /// <returns></returns>
        public List<Requerimiento> BuscarDocumentosRequerimiento()
        {
            // llamamos a la variable session que contiene el id del proyecto actual
            Proyecto _miProyecto = (Proyecto)_vista.Sesion["proyecto"];
            // Llamando a la frabrica de comandos de consultar los requerimientos
            _comandoRequerimiento = FabricaComando.CrearComandoConsultarRequerimiento(_miProyecto.IdProyecto);
            // Ejecutamos el metodo ejecutar del comando
            _requerimiento = _comandoRequerimiento.Ejecutar();
            // Llamamos al metodo cargarTablaRequerimiento pasando por parametro la lista de requerimientos
            CargarTablaRequerimiento(_requerimiento);

            return _requerimiento;
        }

        #endregion Cargar GV Requerimiento

        #region GV SeleccionarRequerimiento

        /// <summary>
        /// Metodo que recorre una lista de requerimiento
        /// y se la asigna a un objeto requerimiento.
        /// </summary>
        /// <param name="_idReq"></param>
        /// <param name="ListaRequerimiento"></param>
        /// <returns></returns>
        public Requerimiento seleccionarRequerimiento(int _idReq, Object ListaRequerimiento)
        {
            // Instanciamos un objeto del tipo Entidad el cual se inicializa de requier
            Entidad _requerimientoInicio = FabricaEntidad.NuevoRequerimiento();
            foreach (Requerimiento _req in (List<Requerimiento>)ListaRequerimiento)
            {
              // verificamos que el Id de la lista sea igual al Id que selecciono el usuario
                if (_idReq == _req.Id)
                {   
                  // asignamos el objeto del tipo requerimiento al siguiente requerimiento 
                    _requerimientoInicio = _req;
                }
            }
            return (_requerimientoInicio as Requerimiento);
        }

        #endregion GV SeleccionarRequerimiento

        #region GV Ocultar Gridview
        /// <summary>
        ///  Metodo para ocultar la columna de los ID
        /// </summary>
        public void OcultarColumna()
        {
            _vista.GVBuscarRequerimiento.HeaderRow.Cells[0].Visible = false;
            foreach (GridViewRow row in _vista.GVBuscarRequerimiento.Rows)
            {
                row.Cells[0].Visible = false;
            }
        }

        #endregion GV Ocultar Gridview

        #region Motor de Busqueda

        /// <summary>
        /// Método que implementa el boton de busqueda.
        /// </summary>
        /// <param name="requerimientos"></param>
        /// <param name="nombreRequerimiento"></param>
        public void buscarRequerimiento(object requerimientos, string nombreRequerimiento)
        {
            List<Requerimiento> _requerimientos = requerimientos as List<Requerimiento>;
            List<Requerimiento> _requerimientosResultado = new List<Requerimiento>();
            foreach (Requerimiento _miRequerimiento in _requerimientos)
            {
                foreach (Seccion _miSeccion in _miRequerimiento.ListaSeccion)
                {
                    foreach (ElementoControl _miElemento in _miSeccion.ListaControl)
                    {
                        if ((_miElemento.Nombre == "Nombre") && (_miElemento.Contenido.Contains(nombreRequerimiento)))
                        {
                            _requerimientosResultado.Add(_miRequerimiento);
                        }
                    }
                }
            }
            CargarTablaRequerimiento(_requerimientosResultado);
            OcultarColumna();

            }
        }

        #endregion Motor de Busqueda

        #endregion Metodos
}